﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NakedObjects;
using System.ComponentModel;
using RTC.Modelo.Repository;
using RTC.Modelo.UFC;

namespace RTC.Modelo.Entidades
{
    [DisplayName("Solicitud")]
    public class Solicitud : Entidad
    {
        public string IconName()
        {
            return "clipboard.png";
        }

        #region Creacion del objeto
        public void Created() {
            this.FechaSolicitud = DateTime.Now;
        }



        #endregion


        public SolicitudRepository SolicitudRepository { set; protected get; }

        #region Atributos

        [Hidden]
        public virtual int Id { set; get; }

        [Title,MemberOrder(10),DisplayName("Fecha de Solicitud") , Mask("d")]
        public virtual DateTime FechaSolicitud { set; get; }

       
        [MemberOrder(20),DisplayName("Solicitante")]
        public virtual DatosPersonales.DatosPersonales DatosPersonales { set; get; }


        [MemberOrder(30),DisplayName("Pago Inicial"), Optionally]
        public virtual Pago PagoInicial { get; set; }

        [MemberOrder(40), DisplayName("Pago Definitivo"), Optionally]
        public virtual Pago PagoDefinitivo { get; set; }

        [Hidden,Disabled, DisplayName("Fecha Modificacion")]
        public virtual DateTime ModifiedDate { get; set; }

        #endregion

        [Hidden]
        protected override void SetModifiedDate()
        {
            ModifiedDate = DateTime.Now;
        }



        #region Deshabilitar propiedades
        public String DisableFechaSolicitud() {
            String resultado = null;
            if (Container.IsPersistent(this)) {
                resultado = "solo puede modificarse cuando se crea";
            }
            return resultado;
        }
        #endregion

        [DisplayName("Agregar Estudio Universitario Previo")]
        public EstudioUniversitario AddEstudioUnivPrevio()
        {
            EstudioUniversitario esp = Container.NewTransientInstance<EstudioUniversitario>();
            esp.Solicitud = this;
            return esp;
        }

        [DisplayName("Agregar Estudio en Centro de Formacion Previo")]
        public EstudioCentroDeFormacion AddEstudioCPPrevio()
        {
            EstudioCentroDeFormacion esp = Container.NewTransientInstance<EstudioCentroDeFormacion>();
            esp.Solicitud = this;
            return esp;
        }

        [DisplayName("Agregar Experiencia Laboral")]
        public virtual ExperienciaLaboral AddExperienciaLaboral(ExperienciaLaboral ExperienciaLaboral)
        {
            ExperienciaLaboral esp = Container.NewTransientInstance<ExperienciaLaboral>();
            esp.Solicitud = this;            
            return esp;
        }

        #region EstudiosPrevios (collection)
        private ICollection<Experiencia> _Experiencias = new List<Experiencia>();

        [DisplayName("Experiencia")]
        public virtual ICollection<Experiencia> Experiencias
        {
            get
            {
                return _Experiencias;
            }
            set
            {
                _Experiencias = value;
            }
        }

        [DisplayName("Quitar Experiencia")]
        public virtual void RemoveFromExperiencias(Experiencia value)
        {
            if (_Experiencias.Contains(value))
            {
                _Experiencias.Remove(value);
            }
        }

        public IList<Experiencia> ChoicesRemoveFromExperiencias(Experiencia value)
        {
            return Experiencias.ToList();
        }
        #endregion

        #region Operadores (collection)
        private ICollection<Operador> _Operadores = new List<Operador>();

        
        public void RemoveFromOperadores(Operador value)
        {
            if (_Operadores.Contains(value))
            {
                _Operadores.Remove(value);
            }
        }

        public IList<Operador> Choices0RemoveFromOperadores()
        {
            return _Operadores.ToList();
        }
        #endregion

        #region Comentario (collection)
        private ICollection<ComentarioSolicitud> _Comentario = new List<ComentarioSolicitud>();

        public virtual ICollection<ComentarioSolicitud> Comentario
        {
            get
            {
                return _Comentario;
            }
            set
            {
                _Comentario = value;
            }
        }

        [DisplayName("Eliminar Comentario")]
        public void RemoveFromComentario(ComentarioSolicitud value)
        {
            if (_Comentario.Contains(value))
            {
                _Comentario.Remove(value);
            }
        }

        public IList<ComentarioSolicitud> Choices0RemoveFromComentario()
        {
            return _Comentario.ToList();
        }

        [DisplayName("Nuevo Comentario")]
        public virtual ComentarioSolicitud CrearComentarioSolicitud()
        {
            ComentarioSolicitud c = Container.NewTransientInstance<ComentarioSolicitud>();
            c.Solicitud = this;
            return c;
        }

        #endregion

    }
}
